package com.lk.jmeter.util;

public class MsgUtil {
	
	private static final String ENCODE = "UTF-8";

	public static byte[] createMsg(byte work, byte method, String content)
			throws Exception {
		byte[] msg = MessageCrypter.encrypt(content.getBytes(ENCODE));
		return combineMessage(new byte[] { work, method }, msg);
	}
	
	public static byte[] combineMessage(byte[] type, byte[] data) {
        byte[] length = ByteUtil.lengthToByteArray(type.length+data.length+1);
        
        data = ByteUtil.bytes2And(type, data);
        // 获取校验值
        byte checker = ByteUtil.RedundancyCheck(data);
        byte[] resultMsg = ByteUtil.bytes3And(length, data, new byte[]{checker});
        
        return resultMsg;
    }
	
	private static byte[] getMessageType(byte[] msg) {
		byte[] msgType = new byte[2];
		System.arraycopy(msg, 0, msgType, 0, msgType.length);
		return msgType;
	}
	
	private static byte[] getMessageData(byte[] msg, byte[] msgType) {
		byte[] msgData = new byte[msg.length - msgType.length - 1];
		System.arraycopy(msg, msgType.length, msgData, 0, msgData.length);
		return msgData;
	}
	
	/**
	 * 处理报文
	 * @param msgBytes
	 */
	public static String doWork(byte[] msgBytes) {
		byte[] typeBytes = getMessageType(msgBytes);
		byte[] dataBytes = getMessageData(msgBytes,typeBytes);
		
		try {
			dataBytes = MessageCrypter.decrypt(dataBytes);
			return new String(dataBytes,0,dataBytes.length, ENCODE).trim();
		} catch (Exception e) {
			e.printStackTrace();
		}
        return null;
	}

}
